import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Administrator extends User {
    public Administrator(String ID, String password, String name, String date, String tel) {
        super(ID, password, name, date, tel);
        setUserType(LoginKey.ADMIN);
    }

    public void adminOperator() { //管理员执行操作
        boolean exit = false;
        while (!exit) {
            switch (adminMenu()) { //管理员菜单
                case "1": // 密码管理
                    passwordManagement();
                    break;
                case "2": //用户管理
                    usersManagement();
                    break;
                case "0": //退出登录
                    System.out.println("-> 退出登录\n");
                    exit = true;
                    break;
            }
        }
    }
    private String adminMenu() { //管理员操作菜单
        // 输出管理员操作界面
        System.out.println("-------权限：" + getUserType() +
                " ----- " + "用户名：" + getUserName() + "-------");
        System.out.println("1. 密码管理");
        System.out.println("2. 用户管理");
        System.out.println("0. 退出登录");
        System.out.println("请选择：");
        String choice;
        boolean right;
        do {
            choice = input.next();
            right = choice.equals("1") || choice.equals("2") || choice.equals("0");
            if (!right) System.out.println("输入错误，请重新输入：");
        } while (!right);
        return choice;
    }

    private void passwordManagement() {
        boolean back = false;
        while (!back) {
            switch (adminPasswordMenu()) {
                case "1": //修改自身密码
                    Tool.resetPassword(this);
                    break;
                case "2": //重置下级用户的密码(经理和前台)
                    Tool.resetLowLevelPassword(this);
                    break;
                case "0": //返回上一级(即返回到管理员菜单)
                    back = true;
                    break;
            }
        }
    }
    private String adminPasswordMenu() {
        System.out.println("-------权限：" + getUserType() +
                " ----- " + "用户名：" + getUserName() + "-------");
        System.out.println("1. 修改自身密码");
        System.out.println("2. 重置下级用户的密码");
        System.out.println("0. 返回上一级");
        System.out.println("请选择：");
        String choice;
        boolean right;
        do {
            choice = input.next();
            right = choice.equals("1") || choice.equals("2") || choice.equals("0");
            if (!right) System.out.println("输入错误，请重新输入：");
        } while (!right);
        return choice;
    }

    private void usersManagement() {
        boolean back = false;
        while (!back) {
            switch (userManagementMenu()) {
                case "1": //列出所有用户信息
                    printUserList();
                    break;
                case "2": //删除指定用户
                    removeUser();
                    break;
                case "3": //查询用户(通过ID或用户名，也可以查询所有用户)
                    queryUser();
                    break;
                case "4": //增加用户(经理，前台) --- especially: 最高管理员admin可以增加管理员
                    addUser();
                    break;
                case "5": //修改用户信息(经理和前台)
                    changeUserInformation();
                    break;
                case "0": //返回上一级
                    back = true;
                    break;
            }
        }
    }
    private String userManagementMenu() {
        System.out.println("-------权限：" + getUserType() +
                " ----- " + "用户名：" + getUserName() + "-------");
        System.out.println("1. 列出所有用户信息");
        System.out.println("2. 删除指定用户");
        System.out.println("3. 查询用户");
        System.out.println("4. 添加用户");
        System.out.println("5. 修改用户信息");
        System.out.println("0. 返回上一级");
        System.out.println("请选择：");
        String choice;
        boolean right;
        do {
            choice = input.next();
            right = choice.equals("1") || choice.equals("2") || choice.equals("3") ||
                    choice.equals("4") || choice.equals("5") || choice.equals("0");
            if (!right) System.out.println("输入错误，请重新输入：");
        } while (!right);
        return choice;
    }

    private void printUserList() {
        //表头
        System.out.println("+------------+-----------------+--------------+---------+-------------+");
        System.out.println("|   userID   |    userName     | registerTime |  Type   | Tele-Number |");
        System.out.println("+------------+-----------------+--------------+---------+-------------+");
        for (User user : CinemaSystem.userList) {
            System.out.printf("| %-10s | %-15s |  %-10s  | %-7s | %-11s |\n",
                    Tool.spaceStack((10 - user.getUserID().length()) / 2) + user.getUserID(),
                    Tool.spaceStack((15 - user.getUserName().length()) / 2) + user.getUserName(),
                    user.getRegisterDate(),
                    Tool.spaceStack((7 - user.getUserType().toString().length()) / 2) + user.getUserType().toString(),
                    user.getUserTel());
            System.out.println("+------------+-----------------+--------------+---------+-------------+");
        }
    }

    private void removeUser() { //删除用户
        boolean loop = true;
        System.out.println("请选择用 ID 查找或是用 用户名 查找欲移除的用户：\n1.ID  2.用户名");
        String findUser;
        while (loop) {
            switch (input.next()) {
                case "1":
                    System.out.println("请输入欲移除用户的ID：");
                    findUser = input.next();
                    if (getUserID().equals("admin")) { //最高管理员
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserID().equals(findUser)) {
                                if (user.getUserID().equals("admin"))
                                    System.out.println("admin账户无法移除！返回上一级...\n");
                                else {
                                    System.out.println("是否确认进行对用户 " + user.getUserName() + " 的移除操作？(1.确认 2.取消)");
                                    if (input.next().equals("1")) {
                                        CinemaSystem.userList.remove(user);
                                        System.out.println("移除 " + user.getUserName() +
                                                "<"+ user.getUserType().toString() + "> 成功！\n");
                                        Tool.log("移除"+ user.getUserType().toString() +" ->" + user.getUserName(), this);
                                    } else
                                        System.out.println("未选择确认，取消操作，返回上一级...");
                                    return;
                                }
                                return;
                            }
                        }
                    }
                    else {
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserID().equals(findUser)) {
                                if (!(user.getUserType().equals(LoginKey.ADMIN))) {
                                    System.out.println("是否确认进行对用户 "+ user.getUserName() +" 的移除操作？(1.确认 2.取消)");
                                    if (input.next().equals("1")) {
                                        CinemaSystem.userList.remove(user);
                                        System.out.println("移除 " + user.getUserName() +
                                                "<"+ user.getUserType().toString() + "> 成功！\n");
                                        Tool.log("移除"+ user.getUserType().toString() +" ->" + user.getUserName(), this);
                                    }
                                    else
                                        System.out.println("未选择确认，取消操作，返回上一级...");
                                    return;
                                }
                                else
                                    System.out.println("您无权进行操作，不可删除该用户！返回上一级...\n");
                                return;
                            }
                        }
                    }
                    loop = false;
                    break;
                case "2":
                    System.out.println("请输入欲移除用户的用户名：");
                    findUser = input.next();
                    if (getUserID().equals("admin")) { //最高管理员
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserName().equals(findUser)) {
                                if (user.getUserID().equals("admin"))
                                    System.out.println("admin账户无法移除！返回上一级...\n");
                                else {
                                    System.out.println("是否确认进行对用户 " + user.getUserName() + " 的移除操作？(1.确认 2.取消)");
                                    if (input.next().equals("1")) {
                                        CinemaSystem.userList.remove(user);
                                        System.out.println("移除 " + user.getUserName() +
                                                "<"+ user.getUserType().toString() + "> 成功！\n");
                                        Tool.log("移除"+ user.getUserType().toString() +" ->" + user.getUserName(), this);
                                    } else
                                        System.out.println("未选择确认，取消操作，返回上一级...");
                                    return;
                                }
                                return;
                            }
                        }
                    }
                    else {
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserName().equals(findUser)) {
                                if (!(user.getUserType().equals(LoginKey.ADMIN))) {
                                    System.out.println("是否确认进行对用户 "+ user.getUserName() +" 的移除操作？(1.确认 2.取消)");
                                    if (input.next().equals("1")) {
                                        CinemaSystem.userList.remove(user);
                                        System.out.println("移除 " + user.getUserName() +
                                                "<"+ user.getUserType().toString() + "> 成功！\n");
                                        Tool.log("移除"+ user.getUserType().toString() +" ->" + user.getUserName(), this);
                                    }
                                    else
                                        System.out.println("未选择确认，取消操作，返回上一级...");
                                    return;
                                }
                                else
                                    System.out.println("您无权进行操作，不可删除该用户！返回上一级...\n");
                                return;
                            }
                        }
                    }
                    loop = false;
                    break;
                default:
                    System.out.println("输入错误，请重新选择： 1.ID  2.用户名");
            }
        }
        System.out.println("未找到该用户，返回上一级...");
    }

    private void queryUser() { //查询用户
        System.out.println("1. 查询所有用户的信息   2.查询单个用户的信息   0.返回上一级\n请选择：");
        boolean loop;
        do {
            switch (input.next()) {
                case "1": //ID
                    printUserList();
                    loop = false;
                    break;
                case "2": //Name
                    boolean tempLoop;
                    System.out.println("请选择用 ID 查找或是用 用户名 查找用户信息：\n1.ID  2.用户名");
                    String findUser;
                    do {
                        switch (input.next()) {
                            case "1":
                                System.out.println("请输入欲查询用户的ID：");
                                findUser = input.next();
                                for (User user : CinemaSystem.userList) {
                                    if (findUser.equals(user.getUserID())) {
                                        System.out.println("该用户信息如下：");
                                        System.out.printf("ID:%-10s 用户名:%-15s 注册时间:%-10s 权限:%-7s 手机号: %-11s\n\n",
                                                user.getUserID(), user.getUserName(), user.getRegisterDate(),
                                                user.getUserType().toString(), user.getUserTel());
                                        return;
                                    }
                                }
                                System.out.println("未找到该用户，返回上一级...");
                                tempLoop = false;
                                break;
                            case "2":
                                System.out.println("请输入欲查询用户的用户名：");
                                findUser = input.next();
                                for (User user : CinemaSystem.userList) {
                                    if (findUser.equals(user.getUserName())) {
                                        System.out.println("该用户信息如下：");
                                        System.out.printf("ID:%-10s 用户名:%-15s 注册时间:%-10s 权限:%-7s 手机号: %-11s\n\n",
                                                user.getUserID(), user.getUserName(), user.getRegisterDate(),
                                                user.getUserType().toString(), user.getUserTel());
                                        return;
                                    }
                                }
                                System.out.println("未找到该用户，返回上一级...");
                                tempLoop = false;
                                break;
                            default:
                                System.out.println("输入错误，请重新选择： 1.ID  2.用户名");
                                tempLoop = true;
                        }
                    } while (tempLoop);
                    loop = false;
                    break;
                case "0": //返回上一级
                    loop = false;
                    break;
                default:
                    System.out.println("输入错误，请重新输入：");
                    loop = true;
            }
        } while (loop);
    }

    private void addUser() {
        String[] newUser = new String[4]; //[0]userID, [1]userName, [2]userType, [3]userTel
        System.out.println("是否开始添加用户？ (1.是  2.否)");
        if (input.next().equals("1")) {
            //添加权限
            boolean loop;
            if (getUserID().equals("admin")) { //admin最高管理员可以添加子管理员
                System.out.println("请输入欲添加用户的权限：(1.管理员  2.经理  3.前台)");
                do {
                    switch (input.next()) {
                        case "1":
                            newUser[2] = "ADMIN";
                            loop = false;
                            break;
                        case "2":
                            newUser[2] = "MANAGER";
                            loop = false;
                            break;
                        case "3":
                            newUser[2] = "STAFF";
                            loop = false;
                            break;
                        default:
                            System.out.println("输入错误，请重新选择：(1.管理员  2.经理  3.前台)");
                            loop = true;
                    }
                } while (loop);
            }
            else { //普通管理员只能添加下级用户
                System.out.println("请输入欲添加用户的权限：(1.经理  2.前台)");
                do {
                    switch (input.next()) {
                        case "1":
                            newUser[2] = "MANAGER";
                            loop = false;
                            break;
                        case "2":
                            newUser[2] = "STAFF";
                            loop = false;
                            break;
                        default:
                            System.out.println("输入错误，请重新选择：(1.经理  2.前台)");
                            loop = true;
                    }
                } while (loop);
            }

            boolean repeated = false;//用于查重
            boolean rename = false;//是否需要重新输入

            //添加ID
            System.out.println("请输入欲添加"+ newUser[2] +"的ID：(长度区间：[6, 10])");
            do {
                newUser[0] = input.next(); //输入ID
                if (newUser[0].length() > 10 || newUser[0].length() < 6) { //查长度
                    System.out.println("长度不符合ID规则，请重新输入ID：");
                    continue;
                }
                for (User user : CinemaSystem.userList) { //查重
                    if (newUser[0].equals(user.getUserID())) {
                        repeated = true;
                        break;
                    }
                    repeated = false;
                }
                if (!repeated) {
                    System.out.println("请确认ID为 [" + newUser[0] + "] 无误：(1.确认 2.否认)");
                    boolean tempLoop;
                    do {
                        switch (input.next()) {
                            case "1":
                                rename = false;
                                tempLoop = false;
                                break;
                            case "2":
                                System.out.println("请重新输入ID：");
                                rename = true;
                                tempLoop = false;
                                break;
                            default:
                                tempLoop = true;
                        }
                    } while (tempLoop);
                }
                else { //ID重复
                    System.out.println("此ID已重复，请重新输入ID：");
                    rename = true;
                }
            } while (rename); //是否需要重新输入ID

            //添加用户名
            System.out.println("请输入欲添加"+ newUser[2] +"的用户名：(长度区间：[1, 15])");
            do {
                newUser[1] = input.next(); //输入用户名
                if (newUser[1].length() > 15 || newUser[0].isEmpty()) { //查长度
                    System.out.println("长度不符合用户名规则，请重新输入用户名：");
                    continue;
                }
                for (User user : CinemaSystem.userList) { //查重
                    if (newUser[1].equals(user.getUserName())) {
                        repeated = true;
                        break;
                    }
                    repeated = false;
                }
                if (!repeated) {
                    System.out.println("请确认用户名为 [" + newUser[1] + "] 无误：(1.确认 2.否认)");
                    boolean tempLoop;
                    do {
                        switch (input.next()) {
                            case "1":
                                rename = false;
                                tempLoop = false;
                                break;
                            case "2":
                                System.out.println("请重新输入用户名：");
                                rename = true;
                                tempLoop = false;
                                break;
                            default:
                                tempLoop = true;
                        }
                    } while (tempLoop);
                }
                else { //用户名重复
                    System.out.println("此用户名已重复，请重新输入用户名：");
                    rename = true;
                }
            } while (rename);

            //添加手机号
            System.out.println("请输入欲添加"+ newUser[2] +"的手机号：(11位)");
            do {
                newUser[3] = input.next(); //输入手机号
                if (newUser[3].length() != 11) { //查长度
                    System.out.println("输入的手机号长度不符，请重新输入：");
                    continue;
                }
                for (User user : CinemaSystem.userList) { //查重
                    if (newUser[3].equals(user.getUserTel())) {
                        repeated = true;
                        break;
                    }
                    repeated = false;
                }
                if (!repeated) {
                    System.out.println("请确认手机号为 [" + newUser[3] + "] 无误：(1.确认 2.否认)");
                    boolean tempLoop;
                    do {
                        switch (input.next()) {
                            case "1":
                                rename = false;
                                tempLoop = false;
                                break;
                            case "2":
                                System.out.println("请重新输入手机号：");
                                rename = true;
                                tempLoop = false;
                                break;
                            default:
                                tempLoop = true;
                        }
                    } while (tempLoop);
                }
                else { //手机号重复
                    System.out.println("此手机号已重复，请重新输入手机号：");
                    rename = true;
                }
            } while (rename);

            String currentDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
            //添加用户到userList
            switch (newUser[2]) { //用户类型分支
                case "ADMIN":
                    CinemaSystem.userList.add(new Administrator(newUser[0], "123456", newUser[1], currentDate, newUser[3]));
                    break;
                case "MANAGER":
                    CinemaSystem.userList.add(new Manager(newUser[0], "123456", newUser[1], currentDate, newUser[3]));
                    break;
                case "STAFF":
                    CinemaSystem.userList.add(new Staff(newUser[0], "123456", newUser[1], currentDate, newUser[3]));
                    break;
            }
            System.out.println("添加"+ newUser[2] +": "+ newUser[1] +"(ID:" + newUser[0] + ") 成功！\n");
        }
        else {
            System.out.println("未选择“是”, 返回上一级...");
        }
    }

    private void changeUserInformation() {
        boolean loop;
        System.out.println("请选择用 ID 查找或是用 用户名 查找欲修改信息的用户：\n1.ID  2.用户名");
        String findUser;
        do {
            switch (input.next()) {
                case "1":
                    System.out.println("请输入欲修改信息用户的ID：");
                    findUser = input.next();
                    //最高管理员(可以更改所有用户的手机号和非管理员的权限)
                    if (getUserID().equals("admin")) {
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserID().equals(findUser)) {  //找到
                                System.out.println("可修改的信息：1.用户权限  2.手机号\n请选择：");
                                while(true) {
                                    switch (input.next()) {
                                        case "1": //改权限
                                            if (user.getUserType().equals(LoginKey.ADMIN)) {
                                                System.out.println("当前用户为管理员，权限不可更改！返回上一级...");
                                                return;
                                            }
                                            System.out.println("该用户当前权限为：" +
                                                    user.getUserType().toString() + ", 请选择欲更改的权限：" +
                                                    "1. 经理   2.前台\n请输入：");
                                            while(true) {
                                                switch (input.next()) {
                                                    case "1": //经理
                                                        System.out.println("对用户" + user.getUserName() +
                                                                "修改权限: " + user.getUserType().toString() +
                                                                "->MANAGER 操作成功！\n");
                                                        user.setUserType(LoginKey.MANAGER); //改经理
                                                        return;
                                                    case "2": //前台
                                                        System.out.println("对用户" + user.getUserName() +
                                                                "修改权限: " + user.getUserType().toString() +
                                                                "->STAFF 操作成功！\n");
                                                        user.setUserType(LoginKey.STAFF); //改前台
                                                        return;
                                                    default:
                                                        System.out.println("输入错误，请重新选择：(1. 经理  2.前台)");
                                                }
                                            }
                                        case "2": //改手机号
                                            System.out.println("该用户当前手机号为：" + user.getUserTel() +
                                                    ", 请输入更改后的新手机号(11位)：");
                                            String newTel;
                                            boolean repeated = false; //查重
                                            boolean reInput = false; //是否需要重新输入手机号
                                            do {
                                                newTel = input.next(); //输入手机号
                                                if (newTel.length() != 11) { //查长度
                                                    System.out.println("输入的手机号长度不符，请重新输入：");
                                                    reInput = true;
                                                    continue;
                                                }
                                                for (User tempUser : CinemaSystem.userList) { //查重
                                                    if (newTel.equals(tempUser.getUserTel())) {
                                                        repeated = true;
                                                        break;
                                                    }
                                                    repeated = false;
                                                }
                                                if (!repeated) {
                                                    System.out.println("请确认新手机号为 [" + newTel + "] 无误：(1.确认 2.否认)");
                                                    boolean ensureLoop; //输入判定
                                                    do {
                                                        switch (input.next()) {
                                                            case "1":
                                                                reInput = false;
                                                                ensureLoop = false;
                                                                break;
                                                            case "2":
                                                                System.out.println("请重新输入手机号：");
                                                                reInput = true;
                                                                ensureLoop = false;
                                                                break;
                                                            default:
                                                                ensureLoop = true;
                                                        }
                                                    } while (ensureLoop);
                                                }
                                                else { //手机号重复
                                                    System.out.println("此手机号已重复，请重新输入手机号：");
                                                    reInput = true;
                                                }
                                            } while (reInput);
                                            System.out.println("更改用户 " + user.getUserName() + " 手机号成功！\n");
                                            user.setUserTel(newTel); //更改手机号
                                            return;
                                        default:
                                            System.out.println("选择错误，请重新选择：(1.用户权限  2.手机号)");
                                    }
                                }
                            }
                        }
                    }
                    else { //普通管理员(只能更改非管理员的权限和手机号)
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserID().equals(findUser)) {
                                System.out.println("可修改的信息：1.用户权限  2.手机号\n请选择：");
                                while(true) {
                                    switch (input.next()) {
                                        case "1":
                                            //改权限
                                            if (user.getUserType().equals(LoginKey.ADMIN)) {
                                                System.out.println("当前用户为管理员，权限不可更改！返回上一级...");
                                                return;
                                            }
                                            else {
                                                System.out.println("该用户当前权限为：" +
                                                        user.getUserType().toString() + ", 请选择欲更改的权限：" +
                                                        "1. 经理   2.前台\n请输入：");
                                                while(true) {
                                                    switch (input.next()) {
                                                        case "1": //经理
                                                            System.out.println("对用户" + user.getUserName() +
                                                                    "修改权限: " + user.getUserType().toString() +
                                                                    "->MANAGER 操作成功！\n");
                                                            user.setUserType(LoginKey.MANAGER); //改经理
                                                            return;
                                                        case "2": //前台
                                                            System.out.println("对用户" + user.getUserName() +
                                                                    "修改权限: " + user.getUserType().toString() +
                                                                    "->STAFF 操作成功！\n");
                                                            user.setUserType(LoginKey.STAFF); //改前台
                                                            return;
                                                        default:
                                                            System.out.println("输入错误，请重新选择：(1. 经理  2.前台)");
                                                    }
                                                }
                                            }
                                        case "2":
                                            //改手机号
                                            if (user.getUserType().equals(LoginKey.ADMIN)) {
                                                System.out.println("当前用户为管理员，您无权更改手机号！返回上一级...");
                                                return;
                                            }
                                            System.out.println("该用户当前手机号为：" + user.getUserTel() +
                                                    ", 请输入更改后的新手机号(11位)：");
                                            String newTel;
                                            boolean repeated = false; //查重
                                            boolean reInput = false; //是否需要重新输入手机号
                                            do {
                                                newTel = input.next(); //输入手机号
                                                if (newTel.length() != 11) { //查长度
                                                    System.out.println("输入的手机号长度不符，请重新输入：");
                                                    reInput = true;
                                                    continue;
                                                }
                                                for (User tempUser : CinemaSystem.userList) { //查重
                                                    if (newTel.equals(tempUser.getUserTel())) {
                                                        repeated = true;
                                                        break;
                                                    }
                                                    repeated = false;
                                                }
                                                if (!repeated) {
                                                    System.out.println("请确认新手机号为 [" + newTel + "] 无误：(1.确认 2.否认)");
                                                    boolean ensureLoop; //输入判定
                                                    do {
                                                        switch (input.next()) {
                                                            case "1":
                                                                reInput = false;
                                                                ensureLoop = false;
                                                                break;
                                                            case "2":
                                                                System.out.println("请重新输入手机号：");
                                                                reInput = true;
                                                                ensureLoop = false;
                                                                break;
                                                            default:
                                                                ensureLoop = true;
                                                        }
                                                    } while (ensureLoop);
                                                }
                                                else { //手机号重复
                                                    System.out.println("此手机号已重复，请重新输入手机号：");
                                                    reInput = true;
                                                }
                                            } while (reInput);
                                            System.out.println("更改用户 " + user.getUserName() + " 手机号成功！\n");
                                            user.setUserTel(newTel); //更改手机号
                                            return;
                                        default:
                                            System.out.println("选择错误，请重新选择：(1.用户权限  2.手机号)");
                                    }
                                }
                            }
                        }
                    }
                    loop = false;
                    break;
                case "2":
                    System.out.println("请输入欲修改信息用户的用户名：");
                    findUser = input.next();
                    if (getUserID().equals("admin")) { //最高管理员
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserName().equals(findUser)) {
                                System.out.println("可修改的信息：1.用户权限  2.手机号\n请选择：");
                                while(true) {
                                    switch (input.next()) {
                                        case "1": //改权限
                                            if (user.getUserType().equals(LoginKey.ADMIN)) {
                                                System.out.println("当前用户为管理员，权限不可更改！返回上一级...");
                                                return;
                                            }
                                            System.out.println("该用户当前权限为：" +
                                                    user.getUserType().toString() + ", 请选择欲更改的权限：" +
                                                    "1. 经理   2.前台\n请输入：");
                                            while(true) {
                                                switch (input.next()) {
                                                    case "1": //经理
                                                        System.out.println("对用户" + user.getUserName() +
                                                                "修改权限: " + user.getUserType().toString() +
                                                                "->MANAGER 操作成功！\n");
                                                        user.setUserType(LoginKey.MANAGER); //改经理
                                                        return;
                                                    case "2": //前台
                                                        System.out.println("对用户" + user.getUserName() +
                                                                "修改权限: " + user.getUserType().toString() +
                                                                "->STAFF 操作成功！\n");
                                                        user.setUserType(LoginKey.STAFF); //改前台
                                                        return;
                                                    default:
                                                        System.out.println("输入错误，请重新选择：(1. 经理  2.前台)");
                                                }
                                            }
                                        case "2": //改手机号
                                            System.out.println("该用户当前手机号为：" + user.getUserTel() +
                                                    ", 请输入更改后的新手机号(11位)：");
                                            String newTel;
                                            boolean repeated = false; //查重
                                            boolean reInput = false; //是否需要重新输入手机号
                                            do {
                                                newTel = input.next(); //输入手机号
                                                if (newTel.length() != 11) { //查长度
                                                    System.out.println("输入的手机号长度不符，请重新输入：");
                                                    reInput = true;
                                                    continue;
                                                }
                                                for (User tempUser : CinemaSystem.userList) { //查重
                                                    if (newTel.equals(tempUser.getUserTel())) {
                                                        repeated = true;
                                                        break;
                                                    }
                                                    repeated = false;
                                                }
                                                if (!repeated) {
                                                    System.out.println("请确认新手机号为 [" + newTel + "] 无误：(1.确认 2.否认)");
                                                    boolean ensureLoop; //输入判定
                                                    do {
                                                        switch (input.next()) {
                                                            case "1":
                                                                reInput = false;
                                                                ensureLoop = false;
                                                                break;
                                                            case "2":
                                                                System.out.println("请重新输入手机号：");
                                                                reInput = true;
                                                                ensureLoop = false;
                                                                break;
                                                            default:
                                                                ensureLoop = true;
                                                        }
                                                    } while (ensureLoop);
                                                }
                                                else { //手机号重复
                                                    System.out.println("此手机号已重复，请重新输入手机号：");
                                                    reInput = true;
                                                }
                                            } while (reInput);
                                            System.out.println("更改用户 " + user.getUserName() + " 手机号成功！\n");
                                            user.setUserTel(newTel); //更改手机号
                                            return;
                                        default:
                                            System.out.println("选择错误，请重新选择：(1.用户权限  2.手机号)");
                                    }
                                }
                            }
                        }
                    }
                    else { //普通管理员
                        for (User user : CinemaSystem.userList) {
                            if (user.getUserName().equals(findUser)) {
                                System.out.println("可修改的信息：1.用户权限  2.手机号\n请选择：");
                                while(true) {
                                    switch (input.next()) {
                                        case "1":
                                            if (user.getUserType().equals(LoginKey.ADMIN)) {
                                                System.out.println("当前用户为管理员，权限不可更改！返回上一级...");
                                                return;
                                            }
                                            else {
                                                System.out.println("该用户当前权限为：" +
                                                        user.getUserType().toString() + ", 请选择欲更改的权限：" +
                                                        "1. 经理   2.前台\n请输入：");
                                                while(true) {
                                                    switch (input.next()) {
                                                        case "1": //经理
                                                            System.out.println("对用户" + user.getUserName() +
                                                                    "修改权限: " + user.getUserType().toString() +
                                                                    "->MANAGER 操作成功！\n");
                                                            user.setUserType(LoginKey.MANAGER);
                                                            return;
                                                        case "2": //前台
                                                            System.out.println("对用户" + user.getUserName() +
                                                                    "修改权限: " + user.getUserType().toString() +
                                                                    "->STAFF 操作成功！\n");
                                                            user.setUserType(LoginKey.STAFF);
                                                            return;
                                                        default:
                                                            System.out.println("输入错误，请重新选择：(1. 经理  2.前台)");
                                                    }
                                                }
                                            }
                                        case "2":
                                            if (user.getUserType().equals(LoginKey.ADMIN)) {
                                                System.out.println("当前用户为管理员，您无权更改手机号！返回上一级...");
                                                return;
                                            }
                                            System.out.println("该用户当前手机号为：" + user.getUserTel() +
                                                    ", 请输入更改后的新手机号(11位)：");
                                            String newTel;
                                            boolean repeated = false;
                                            boolean reInput = false;
                                            do {
                                                newTel = input.next(); //输入手机号
                                                if (newTel.length() != 11) {
                                                    System.out.println("输入的手机号长度不符，请重新输入：");
                                                    reInput = true;
                                                    continue;
                                                }
                                                for (User tempUser : CinemaSystem.userList) {
                                                    if (newTel.equals(tempUser.getUserTel())) {
                                                        repeated = true;
                                                        break;
                                                    }
                                                    repeated = false;
                                                }
                                                if (!repeated) {
                                                    System.out.println("请确认新手机号为 [" + newTel + "] 无误：(1.确认 2.否认)");
                                                    boolean ensureLoop;
                                                    do {
                                                        switch (input.next()) {
                                                            case "1":
                                                                reInput = false;
                                                                ensureLoop = false;
                                                                break;
                                                            case "2":
                                                                System.out.println("请重新输入手机号：");
                                                                reInput = true;
                                                                ensureLoop = false;
                                                                break;
                                                            default:
                                                                ensureLoop = true;
                                                        }
                                                    } while (ensureLoop);
                                                }
                                                else { //手机号重复
                                                    System.out.println("此手机号已重复，请重新输入手机号：");
                                                    reInput = true;
                                                }
                                            } while (reInput);
                                            System.out.println("更改用户 " + user.getUserName() + " 手机号成功！\n");
                                            user.setUserTel(newTel); //更改手机号
                                            return;
                                        default:
                                            System.out.println("选择错误，请重新选择：(1.用户权限  2.手机号)");
                                    }
                                }
                            }
                        }
                    }
                    loop = false;
                    break;
                default:
                    System.out.println("输入错误，请重新选择： 1.ID  2.用户名");
                    loop = true;
            }
        } while (loop);
        System.out.println("未找到该用户，返回上一级...");
    }
}